<?php 
/**
 * Calendrier V3
 * 
 * Permet d'administrer le calendrier.
 * 
 * @package : dmi
 * @author : Filament (Etienne Sainton)
 * @since : 11/04/11
 * @version : 0.1
 */
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
include($phpbb_root_path . '../calendar/Mois.php');
include($phpbb_root_path . '../calendar/Projet.php');
include($phpbb_root_path . 'includes/class_categories.php');

//On initialise les informations et les erreurs :
$infos = array();
$erreurs = array();		
		
class dmi_calendrier
{
	var $u_action;
	var $permission_dropdown;
	
	function main($id, $mode)
	{
		global $db, $user, $auth, $template, $cache;
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
		global $infos, $erreurs;
		
		//Valeur par défaut pour le template et les langues :
		$user->add_lang('dmi/general');
		add_permission_language();	
		$template->assign_vars(array(
			"USER_SID" => $user->data['session_id'],
		));

		//On prend le mode courant
		$mode = utf8_normalize_nfc(request_var('mode', '', true));
		
		//On récupère $action
		$action = utf8_normalize_nfc(request_var('action', '', true));
		
		//On rappelle le fuseau horaire du membre :
		date_default_timezone_set("Europe/Paris");

		switch($action)
		{
			case 'add_event' :
				$newEvent = new Evenement(null);
				if(request_var('dateFin', '', true) == "")
					$date_fin = mktime(0,0,0,substr(request_var('dateDebut', '', true), 3,2),substr(request_var('dateDebut', '', true), 0,2),substr(request_var('dateDebut', '', true), 6,4)) + 86400;
				else
					$date_fin = mktime(0,0,0,substr(request_var('dateFin', '', true), 3,2),substr(request_var('dateFin', '', true), 0,2)+1,substr(request_var('dateFin', '', true), 6,4));
				
				$newEvent->creer_evenement(
								utf8_normalize_nfc(request_var('nomEvent', '', true))
								,mktime(0,0,0,substr(request_var('dateDebut', '', true), 3,2),substr(request_var('dateDebut', '', true), 0,2),substr(request_var('dateDebut', '', true), 6,4))
								,$date_fin
								,utf8_normalize_nfc(request_var('descriptionEvent', '', true))
								,utf8_normalize_nfc(request_var('theme', '', true))
								,utf8_normalize_nfc(request_var('projet', '', true))
								,request_var('recurrent', false)
								,utf8_normalize_nfc(request_var('occurName', '', true))
								,utf8_normalize_nfc(request_var('lienEvent', '', true))
							);
				$mode = 'liste_evenements';
				break;
			case 'edit_event' :
				$newEvent = new Evenement((int) request_var('eventId', '', true));
				$newEvent->editer_evenement(
								utf8_normalize_nfc(request_var('nomEvent', '', true))
								,mktime(0,0,0,substr(request_var('dateDebut', '', true), 3,2),substr(request_var('dateDebut', '', true), 0,2),substr(request_var('dateDebut', '', true), 6,4))
								,mktime(0,0,0,substr(request_var('dateFin', '', true), 3,2),substr(request_var('dateFin', '', true), 0,2)+1,substr(request_var('dateFin', '', true), 6,4))
								,utf8_normalize_nfc(request_var('descriptionEvent', '', true))
								,utf8_normalize_nfc(request_var('theme', '', true))
								,utf8_normalize_nfc(request_var('projet', '', true))
								,request_var('recurrent', false)
								,utf8_normalize_nfc(request_var('occurName', '', true))
								,utf8_normalize_nfc(request_var('lienEvent', '', true))
							);
				$mode = 'liste_evenements';
				break;
			case 'delete_event' :
				if (!confirm_box(true))
				{
					$confirm = true;
					$confirm_lang = 'CONFIRM_OPERATION';
				}
				if ($confirm)
				{
					confirm_box(false, $user->lang[$confirm_lang], build_hidden_fields(array(
						'i'			=> $id,
						'mode'		=> $mode,
						'action'	=> $action,
					)));
				} else {
					$tmpEvent = new Evenement((int) request_var('event', '', true));
					$tmpEvent->supprimer_evenement();
					$mode = 'liste_evenements';
				}
				break;
			case 'add_projet' :
				$newProjet = new Projet();
				$newProjet->creer_projet(
								utf8_normalize_nfc(request_var('nomProjet', '', true))
								, utf8_normalize_nfc(request_var('descriptionProjet', '', true))
								, (int) request_var('theme', '', true)
							);
				$mode = 'liste_projets';
				break;
			case 'edit_projet' :
				$newProjet = new Projet((int) request_var('projectId', '', true));
				$newProjet->editer_projet(
								utf8_normalize_nfc(request_var('nomProjet', '', true))
								,utf8_normalize_nfc(request_var('descriptionProjet', '', true))
								,utf8_normalize_nfc(request_var('theme', '', true))
							);
				$mode = 'liste_projets';
				break;
			case 'delete_projet' :
				if (!confirm_box(true))
				{
					$confirm = true;
					$confirm_lang = 'CONFIRM_OPERATION';
				}
				if ($confirm)
				{
					confirm_box(false, $user->lang[$confirm_lang], build_hidden_fields(array(
						'i'			=> $id,
						'mode'		=> $mode,
						'action'	=> $action,
					)));
				} else {
					$tmpProjet = new Projet((int) request_var('projet', '', true));
					$tmpProjet->supprimer_projet();
					$mode = 'liste_projets';
				}
				break;
			case 'add_mois' :
				$mois = mktime(0,0,0,request_var('mois', '', true), 1, request_var('annee', '', true));
				$mois = new Mois(date('mY',$mois));
				$mois->ajouter_image(request_var('nomImage', '', true));
				$mode = 'gestion_mois';
				break;
			case 'edit_mois' :
				$mois = mktime(0,0,0,request_var('mois', '', true), 1, request_var('annee', '', true));
				$mois = new Mois(date('mY',$mois));
				$mois->editer_image(request_var('nomImage', '', true));
				$mode = 'gestion_mois';
				break;
		}
		
		switch($mode)
		{
			case "edit_evenement" :
				//Quel event allons nous éditer ?
				$event_id = request_var('event',0);
				
				$event = new Evenement($event_id);
				
				//On envoie les informations spécifiques au template :
				$event->voir_presentation();
			case "ajout_evenement" :
				$this->tpl_name = 'calendrier/ajout_evenement';
				
				//La liste des projets :
				$this->listeProjets();
				
				//On liste les thèmes, et on envoie ça au template
				$this->listeCategories();
				
				break;	
			case "liste_evenements" : 
				$this->tpl_name = 'calendrier/voir';	
				
				//On liste les évènements à venir :
				$this->listEvents();
				
				break;
			case "edit_projet" :
				$this->tpl_name = 'calendrier/ajout_projet';
				
				//Quel projet allons nous éditer ?
				$project_id = request_var('project',0);
				
				$project = new Projet($project_id);
				
				//On envoie les informations spécifiques au template :
				$project->voir_presentation();
				
				//On liste les thèmes, et on envoie ça au template
				$this->listeCategories();
				
				break;
			case "ajout_projet" : 
				$this->tpl_name = 'calendrier/ajout_projet';
				
				//On liste les thèmes, et on envoie ça au template
				$this->listeCategories();

				break;
			case "liste_projets" :
				$this->tpl_name = 'calendrier/liste_projets';
				
				//On liste les projets et on envoie ça au template :
				$this->listeProjets();
				
				break;
			case "gestion_mois" :
				$this->tpl_name = 'calendrier/liste_mois';
				
				//On liste les mois à venir :
				$mois = "SELECT
							mois
							, annee
							, image
						FROM
							" . CALENDRIER_MOIS_TABLE . "
						WHERE
							(
									annee = '".substr(date('y'),2,2)."'
								AND
									mois > '".date('m')."'
							)
							OR
								annee > '".substr(date('y'),2,2)."'
						ORDER BY
							mois
						DESC";
				$result = $db->sql_query($mois);
				while($mois = $db->sql_fetchrow($result)) {
					$template->assign_block_vars('mois', array(
						'MOIS'				=> $mois['mois'],
						'ANNEE'				=> $mois['annee'],
						'IMAGE'				=> $mois['image'],
						'LINK_ADD_MONTH'	=> append_sid('index.php?i=calendrier&mode=editer_mois&mois='.$mois['mois'].'&annee='.$mois['annee']),
						'LINK_EDIT_MONTH'	=> append_sid('index.php?i=calendrier&mode=editer_mois&mois='.$mois['mois'].'&annee='.$mois['annee'])
					));
				}
				$db->sql_freeresult($result);

				break;
			case 'ajouter_mois' :
				$this->tpl_name = 'calendrier/edit_mois';
				
				
				break;
			case 'editer_mois' :
				$this->tpl_name = 'calendrier/edit_mois';
				
				//On récupère les données sur le mois :
				$mois = (int) request_var('mois', 0);
				$annee = (int) request_var('annee', 0);
				
				//On affiche les infos dont on a besoin :
				$mois = new Mois(mktime(0,0,0,$mois, 1,$annee));
				$mois->voir_mois();
				
				//On ajotue le lien bien formaté avec la session du user pour valider le formulaire :
				$template->assign_vars(array(
					'LINK_ACTION_MONTH'	=> append_sid('index.php?i=calendrier&mode=gestion_mois')
				));
				
				break;
			case "voir_calendrier" : 
			default :
				$this->tpl_name = 'calendrier/voir';	
				
				//On affiches les évènements à venir dans le calendrier :
				$this->listEvents();
				break;
		}
		
		//Si jamais on a une information à afficher, on l'affiche :
		if(!empty($infos)) {
			foreach ($infos as  $info_msg)
			{
				//Cette méthode permet de confirmer les actions
				$template->assign_block_vars('infos_membre', array(
					'INFO_MSG'  => $info_msg,
				));
			}
		}

		//On envoie les erreurs relevées si erreurs il y a :
		if(!empty($erreurs)) {
			foreach ($erreurs as  $erreur_msg)
			{
				//Cette méthode permet de faire varier sans soucis le nombre d'erreurs afin de 							// guider au mieux le rédacteur du dossier
			    $template->assign_block_vars('erreurs', array(
					'ERREUR_MSG'  => $erreur_msg,
				    ));
			}
		}
	}
	
	/**
	 * Est ce que ce sera une nested boucle ?
	 * @var string $nested Si c'est une nested boucle, alors donner le nom de la boucle supérieure
	 */
	private function listeProjets($nested = null) {
		global $db;

		//On sélectionne tous les projets :
		$projets = "SELECT
						id_projet
					FROM
						" . CALENDRIER_PROJET_TABLE . "	
					ORDER BY
						theme
						, nom_projet";
		$result = $db->sql_query($projets);
		while($dataProjet = $db->sql_fetchrow($result)) {
			$tmpProjet = new Projet((int) $dataProjet['id_projet']);
			$tmpProjet->voir_presentation(true, $nested);	
		}
		$db->sql_freeresult($result);
	}
	
	private function listeCategories() {
		global $db, $template;
		
		//Quelles sont les différentes catégories ?
		$cats = "SELECT 
					id_cat
					, titre
					, level
					, color
					, logo
				FROM 
					" . CATEGORIES_TABLE . "
				ORDER BY 
					left_id";
						
		$result = $db->sql_query($cats);
		while($cat = $db->sql_fetchrow($result)) {
			//On met en place le nombre d'espaces pour le titre dans le menu déroulant:
			$titre = $cat['titre'];
			for($i = 0; $i < $cat['level']; $i++) {
				$titre= "&nbsp;&nbsp;&nbsp;".$titre;
			}

			//Et là on envoie au template :
			$template->assign_block_vars('categories', array(
				'CAT_ID'	=> $cat['id_cat'],
				'TITRE' 	=> $titre,
				'COLOR'		=> $cat['color'],
				'LOGO'		=> $cat['logo']
			));
		}

		//On programme propre, donc on nettoie derrière nous :
		$db->sql_freeresult($result);
	}
	
	private function listEvents() {
		global $db, $template;
		
		//On liste les évènements à venir :
		$events = "SELECT
						id_evenement
					FROM
						" . CALENDRIER_EVENEMENT_TABLE . "
					ORDER BY
						date_debut DESC";
		$result = $db->sql_query($events);
		$i = 0;
		while($event = $db->sql_fetchrow($result)) {
			$tmp_event = new Evenement($event['id_evenement']);
			$tmp_event->voir_presentation(true);
		}
		$db->sql_freeresult($result);
	}
}

?>
